/*
88. 合并两个有序数组
给定两个有序整数数组 nums1 和 nums2，将 nums2 合并到 nums1中，使得 num1 成为一个有序数组。

注意:

你可以假设 nums1有足够的空间（空间大小大于或等于m + n）来保存 nums2 中的元素。在 nums1 和 nums2 中初始化的元素的数量分别是 m 和 n。

*/

/*
合并后按从小到大排列
*/
class Solution
{
public:
    void merge(vector<int> &nums1, int m, vector<int> &nums2, int n)
    {
        int k = m + n - 1;
        int mp = m - 1;
        int np = n - 1;
        for(; k >= 0; k--) {
            if(np >= 0 && mp >= 0) {
                nums1[k] = nums1[mp] > nums2[np] ? nums1[mp--] : nums2[np--];
            } else {
                nums1[k] = np >= 0 ? nums2[np--] : nums1[mp--];
            }
        }
    }
};

class Solution
{
public:
    void merge(vector<int> &nums1, int m, vector<int> &nums2, int n)
    {
        if(n == 0) return;
        int k = m + n - 1;
        int mp = m - 1;
        int np = n - 1;
        while(mp >= 0 && np >= 0) {
            nums1[k--] = nums1[mp] > nums2[np] ? nums1[mp--] : nums2[np--];
        }
        while(np >= 0) {
            nums1[k--] = nums2[np--];
        }
        /* no need do this */
        // while (mp >= 0){
        //     nums1[k--] = nums1[mp--];
        // }
    }
};
